package com.yqh.OutputStream;

import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

/**
 * 字节输出流写数据
 *
 * @author 阳秋豪
 * @createTime 2024/3/7
 */
public class Test1 {
    public static void main(String[] args) throws IOException {
        /*------------------- FileOutputStream 的作用 -------------------*/
        // 可以把程序中的数据写到本地文件上，是字节流的基本流。

        /*------------------- 字节输出流的细节 -------------------*/
        // 1、创建字节输出流对象
        // -- 参数是字符串表示的路径或者是 File 对象都是可以的
        // -- 如果文件不存在会创建一个新的文件，但是要保证父级路径是存在的
        // -- 如果文件已经存在，则会清空文件

        // 2、写数据
        // -- write方法的参数是整数，但是实际上写到本地文件中的是整数在 ASCII 上对应的字符

        // 3、释放资源
        // -- 每次使用完流之后都要释放资源

        /*------------------- 字节输出流写数据代码 -------------------*/
        // 1、创建对象
        FileOutputStream fos1 = new FileOutputStream("a.txt");

        // 2、写出数据（三种方式）
        // -- 一次写一个字节
        fos1.write(97); // a
        // -- 一次写一个字节数组数据
        byte[] bytes = {97, 98, 99};
        fos1.write(bytes); // abc
        // -- 一次写一个字节数组的部分数据
        fos1.write(bytes, 0, 2); // ab

        // 3、释放资源
        fos1.close();

        /*------------------- 字节输出流写数据的扩展 -------------------*/
        // 1、换行写
        // -- windows \r \n
        // -- Linux   \n
        // -- max     \r
        // 细节：在windows操作系统当中，java对回车换行进行了优化虽然完整的是\r\n，但是我们写其中一个\r或者\n,java也可以实现换行，因为java在底层会补全。
        // 建议：不要省略，还是写全了。
        FileOutputStream fos2 = new FileOutputStream("b.txt");
        fos2.write("啊哈哈哈".getBytes(StandardCharsets.UTF_8));
        fos2.write("\r\n".getBytes(StandardCharsets.UTF_8)); // 换行操作
        fos2.write("我没疯我没疯我真没疯".getBytes(StandardCharsets.UTF_8));
        fos2.close();

        // 2、续写
        // -- 如果想要续写，打开续写开关即可
        // -- 开关位置:创建对象的第二个参数
        // -- 默认false:表示关闭续写，此时创建对象会清空文件
        // -- 手动传递true:表示打开续写，此时创建对象不会清空文件
        FileOutputStream fos3 = new FileOutputStream("b.txt", true); // 续写操作
        fos3.write("\r\n".getBytes(StandardCharsets.UTF_8));
        fos3.write("你疯了你疯了跟我们一样都疯了".getBytes(StandardCharsets.UTF_8));
        fos3.close();

    }
}
